1094. 拼车【中等】
1. 📝 题目描述
车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)
给定整数 capacity 和一个数组 trips , trips[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
示例 1:
txt
输入:trips = [[2,1,5],[3,3,7]], capacity = 4
输出:false1
2
2
示例 2:
txt
输入:trips = [[2,1,5],[3,3,7]], capacity = 5
输出:true1
2
2
提示:
1 <= trips.length <= 1000trips[i].length == 31 <= numPassengersi <= 1000 <= fromi < toi <= 10001 <= capacity <= 10^5
2. 🎯 s.1 - 差分数组
js
/**
* @param {number[][]} trips
* @param {number} capacity
* @return {boolean}
*/
var carPooling = function (trips, capacity) {
const diff = new Array(1001).fill(0)
for (const [num, from, to] of trips) {
diff[from] += num
diff[to] -= num
}
let cur = 0
for (let i = 0; i <= 1000; i++) {
cur += diff[i]
if (cur > capacity) return false
}
return true
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 时间复杂度:
,其中 是 trips 的长度, - 空间复杂度:
,差分数组的大小
算法思路:
- 建立差分数组,在上车点 from 加上乘客数,在下车点 to 减去乘客数
- 前缀和还原每个位置的实际乘客数
- 若任一位置超过 capacity 则返回 false